package com.csw.android.dev_utils.liveData

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer

/**
 * 通用的liveData数据监听器，可以实现在不同的liveData之间切换订阅(会自动取消上个LiveData的订阅)
 *
 * @param T 数据的类型
 * @property lifecycleOwner 生命周期控制，当为空时，调用者应该根据实际作用域，在生命周期结束时设置liveData为空
 * @property onDataChanged 数据更新时回调
 */
class CommonLiveDataListener<T>(
    val lifecycleOwner: LifecycleOwner? = null,
    val onDataChanged: (T?) -> Unit
) {
    private val innerListener = Observer<T?> { onDataChanged(it) }

    /**要订阅的数据*/
    var liveData: LiveData<T?>? = null
        set(value) {
            if (field != value) {
                field?.removeObserver(innerListener)
                field = value
                field?.run {
                    if (lifecycleOwner != null) {
                        observe(lifecycleOwner, innerListener)
                    } else {
                        observeForever(innerListener)
                    }
                }
            }
        }
}